home *** CD-ROM | disk | FTP | other *** search
/ Chip 2007 January, February, March & April / Chip-Cover-CD-2007-02.iso / Pakiet bezpieczenstwa / mini Pentoo LiveCD 2006.1 / mpentoo-2006.1.iso / livecd.squashfs / usr / include / alsa / pcm_extplug.h < prev    next >
C/C++ Source or Header  |  2006-01-09  |  6KB  |  186 lines

  1. /**
  2.  * \file include/pcm_extplug.h
  3.  * \brief External Filter-Plugin SDK
  4.  * \author Takashi Iwai <tiwai@suse.de>
  5.  * \date 2005
  6.  *
  7.  * External Filter-Plugin SDK
  8.  */
  9.  
  10. /*
  11.  * ALSA external PCM plugin SDK (draft version)
  12.  *
  13.  * Copyright (c) 2005 Takashi Iwai <tiwai@suse.de>
  14.  *
  15.  *   This library is free software; you can redistribute it and/or modify
  16.  *   it under the terms of the GNU Lesser General Public License as
  17.  *   published by the Free Software Foundation; either version 2.1 of
  18.  *   the License, or (at your option) any later version.
  19.  *
  20.  *   This program is distributed in the hope that it will be useful,
  21.  *   but WITHOUT ANY WARRANTY; without even the implied warranty of
  22.  *   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
  23.  *   GNU Lesser General Public License for more details.
  24.  *
  25.  *   You should have received a copy of the GNU Lesser General Public
  26.  *   License along with this library; if not, write to the Free Software
  27.  *   Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307 USA
  28.  *
  29.  */
  30.  
  31. #ifndef __ALSA_PCM_EXTPLUG_H
  32. #define __ALSA_PCM_EXTPLUG_H
  33.  
  34. /**
  35.  * \defgroup PCM_ExtPlug External Filter plugin SDK
  36.  * \ingroup Plugin_SDK
  37.  * See the \ref pcm page for more details.
  38.  * \{
  39.  */
  40.  
  41. /** hw constraints for extplug */
  42. enum {
  43.     SND_PCM_EXTPLUG_HW_FORMAT,    /**< format */
  44.     SND_PCM_EXTPLUG_HW_CHANNELS,    /**< channels */
  45.     SND_PCM_EXTPLUG_HW_PARAMS    /**< max number of hw constraints */
  46. };
  47.     
  48. /** Handle of external filter plugin */
  49. typedef struct snd_pcm_extplug snd_pcm_extplug_t;
  50. /** Callback table of extplug */
  51. typedef struct snd_pcm_extplug_callback snd_pcm_extplug_callback_t;
  52.  
  53. /*
  54.  * Protocol version
  55.  */
  56. #define SND_PCM_EXTPLUG_VERSION_MAJOR    1    /**< Protocol major version */
  57. #define SND_PCM_EXTPLUG_VERSION_MINOR    0    /**< Protocol minor version */
  58. #define SND_PCM_EXTPLUG_VERSION_TINY    0    /**< Protocol tiny version */
  59. /**
  60.  * Filter-plugin protocol version
  61.  */
  62. #define SND_PCM_EXTPLUG_VERSION        ((SND_PCM_EXTPLUG_VERSION_MAJOR<<16) |\
  63.                      (SND_PCM_EXTPLUG_VERSION_MINOR<<8) |\
  64.                      (SND_PCM_EXTPLUG_VERSION_TINY))
  65.  
  66. /** Handle of extplug */
  67. struct snd_pcm_extplug {
  68.     /**
  69.      * protocol version; #SND_PCM_EXTPLUG_VERSION must be filled here
  70.      * before calling #snd_pcm_extplug_create()
  71.      */
  72.     unsigned int version;
  73.     /**
  74.      * name of this plugin; must be filled before calling #snd_pcm_extplug_create()
  75.      */
  76.     const char *name;
  77.     /**
  78.      * callbacks of this plugin; must be filled before calling #snd_pcm_extplug_create()
  79.      */
  80.     const snd_pcm_extplug_callback_t *callback;
  81.     /**
  82.      * private data, which can be used freely in the driver callbacks
  83.      */
  84.     void *private_data;
  85.     /**
  86.      * PCM handle filled by #snd_pcm_extplug_create()
  87.      */
  88.     snd_pcm_t *pcm;
  89.     /**
  90.      * stream direction; read-only status
  91.      */
  92.     snd_pcm_stream_t stream;
  93.     /**
  94.      * format hw parameter; filled after hw_params is caled
  95.      */
  96.     snd_pcm_format_t format;
  97.     /**
  98.      * subformat hw parameter; filled after hw_params is caled
  99.      */
  100.     snd_pcm_subformat_t subformat;
  101.     /**
  102.      * channels hw parameter; filled after hw_params is caled
  103.      */
  104.     unsigned int channels;
  105.     /**
  106.      * rate hw parameter; filled after hw_params is caled
  107.      */
  108.     unsigned int rate;
  109.     /**
  110.      * slave_format hw parameter; filled after hw_params is caled
  111.      */
  112.     snd_pcm_format_t slave_format;
  113.     /**
  114.      * slave_subformat hw parameter; filled after hw_params is caled
  115.      */
  116.     snd_pcm_subformat_t slave_subformat;
  117.     /**
  118.      * slave_channels hw parameter; filled after hw_params is caled
  119.      */
  120.     unsigned int slave_channels;
  121. };
  122.  
  123. /** Callback table of extplug */
  124. struct snd_pcm_extplug_callback {
  125.     /**
  126.      * transfer between source and destination; this is a required callback
  127.      */
  128.     snd_pcm_sframes_t (*transfer)(snd_pcm_extplug_t *ext,
  129.                       const snd_pcm_channel_area_t *dst_areas,
  130.                       snd_pcm_uframes_t dst_offset,
  131.                       const snd_pcm_channel_area_t *src_areas,
  132.                       snd_pcm_uframes_t src_offset,
  133.                       snd_pcm_uframes_t size);
  134.     /**
  135.      * close the PCM; optional
  136.      */
  137.     int (*close)(snd_pcm_extplug_t *ext);
  138.     /**
  139.      * hw_params; optional
  140.      */
  141.     int (*hw_params)(snd_pcm_extplug_t *ext, snd_pcm_hw_params_t *params);
  142.     /**
  143.      * hw_free; optional
  144.      */
  145.     int (*hw_free)(snd_pcm_extplug_t *ext);
  146.     /**
  147.      * dump; optional
  148.      */
  149.     void (*dump)(snd_pcm_extplug_t *ext, snd_output_t *out);
  150. };
  151.  
  152.  
  153. int snd_pcm_extplug_create(snd_pcm_extplug_t *ext, const char *name,
  154.                snd_config_t *root, snd_config_t *slave_conf,
  155.                snd_pcm_stream_t stream, int mode);
  156. int snd_pcm_extplug_delete(snd_pcm_extplug_t *ext);
  157.  
  158. /* clear hw_parameter setting */
  159. void snd_pcm_extplug_params_reset(snd_pcm_extplug_t *ext);
  160.  
  161. /* hw_parameter setting */
  162. int snd_pcm_extplug_set_param_list(snd_pcm_extplug_t *extplug, int type, unsigned int num_list, const unsigned int *list);
  163. int snd_pcm_extplug_set_param_minmax(snd_pcm_extplug_t *extplug, int type, unsigned int min, unsigned int max);
  164. int snd_pcm_extplug_set_slave_param_list(snd_pcm_extplug_t *extplug, int type, unsigned int num_list, const unsigned int *list);
  165. int snd_pcm_extplug_set_slave_param_minmax(snd_pcm_extplug_t *extplug, int type, unsigned int min, unsigned int max);
  166.  
  167. /**
  168.  * set the parameter constraint with a single value
  169.  */
  170. static inline int snd_pcm_extplug_set_param(snd_pcm_extplug_t *extplug, int type, unsigned int val)
  171. {
  172.     return snd_pcm_extplug_set_param_list(extplug, type, 1, &val);
  173. }
  174.  
  175. /**
  176.  * set the parameter constraint for slave PCM with a single value
  177.  */
  178. static inline int snd_pcm_extplug_set_slave_param(snd_pcm_extplug_t *extplug, int type, unsigned int val)
  179. {
  180.     return snd_pcm_extplug_set_slave_param_list(extplug, type, 1, &val);
  181. }
  182.  
  183. /** \} */
  184.  
  185. #endif /* __ALSA_PCM_EXTPLUG_H */
  186.